// 本题要求实现一个将长整数转化成16进制字符串的简单函数。

// 函数接口定义：
// void f( long int x, char *p );

// 其中x是待转化的十进制长整数，p指向某个字符数组的首元素。函数f的功能是把转换所得的16进制字符串写入p所指向的数组。16进制的A~F为大写字母。

// 裁判测试程序样例：
#include <stdio.h>
#define MAXN 10

void f(long int x, char *p);

int main()
{
    long int x;
    char s[MAXN] = "";

    scanf("%ld", &x);
    f(x, s);
    printf("%s\n", s);

    return 0;
}

void f(long int x, char *p)
{
    if (x != 0) // 排除x一开始为0的情况，x一开始为0的话就不能进入循环
    {
        int signal, position = 0; // 0表示个位，1表示百位,以此类推,之后还需要倒序
        char temp[MAXN] = "";     // 必须分配存储空间
        char *hexStr = "0123456789ABCDEF";
        if (x >= 0)
        {
            signal = 1;
        }
        else
        {
            signal = -1;
        }

        while (position < MAXN - 1 && x)
        {
            temp[position] = hexStr[(x * signal) % 16];
            x /= 16;
            position++;
        }
        temp[position] = '\0'; // 字符串结尾的空字符
        if (signal == 1)
        {
            for (int i = 0; i < position; i++) // 倒序
            {
                p[i] = temp[position - i - 1];
            }
            p[position] = '\0';
        }
        else if (signal == -1 && position < MAXN - 1) // position < MAXN - 1是x为负数时，题目保证要成立的，这里只是为了严谨
        {
            p[0] = '-';
            for (int i = 1; i < position + 1; i++)
            {
                p[i] = temp[position - i];
            }
            p[position + 1] = '\0';
        }
    }
    else
    {
        p[0] = '0';
        p[1] = '\0';
    }
}

// 输入样例1：
// 123456789

// 输出样例1：
// 75BCD15

// 输入样例2：
// -125

// 输出样例2：
// -7D